require "import"
import "tools"
activity.setContentView("help_")
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS).setStatusBarColor(0xff4DB6AC)

p=[[
--【常用参数笔记】
-i 输入文件

-b 数据比特率（ABR（平均比特率编码））

-b:v 视频比特率（例如，-b:v 3000k）

-b:a 音频比特率（-b:a 320k）

-q:a 音频比特率（-q:a 0表示质量最高，VBR（可变比特率编码），可选范围0~9 ）

-vn 不使用视频

-an 不使用音频

-sn 不使用字幕

-c 编解码器（-c copy表示复制音视频编解码流，相当于-vcodec copy -acodec copy）

-c:v 视频编解码器（-c:v copy表示复制视频编解码流，与-vcodec copy类似）

-c:a 音频编解码器（与-acodec类似）

-c:s 字幕编解码器

-vcodec 视频强制使用codec编解码（如果用copy表示原始编解码数据必须被拷贝）

-acodec 音频强制使用codec编解码

-r 视频帧率 （-r 25表示每秒25帧）

-s 视频分辨率（-s 1920x1080）

-aspect 设定画面的比例

-y 若已有同名文件，覆盖输出文件而不询问

-n 不要覆盖输出文件，如果指定的输出文件已经存在，立即退出

-f （-f mp4，强制输出什么格式）

-ss 跳到指定时间（-ss 1:23.456，支持hh:mm:ss(.xxx)时间格式）

-t 设置持续时间（-t 00:44:27.080，-t 4表示4秒）

-map 设置输入流映射
（-map 0表示选择第一个输入文件的所有流）
（-map i:v 从第i+1个文件中获取所有视频流， -map i:a 获取所有音频流，-map i:s 获取所有字幕流）
（-map 0:v:0表示选择第一个输入文件的第一个视频流，音频、字幕以此类推）

-vf 视频过滤器（在多媒体处理中，filter的意思是被编码到输出文件之前用来修改输入文件内容的一个软件工具。如：视频翻转，旋转，缩放等）

-af 音频过滤器（倍速播放等）

-filter:v（同-vf，视频过滤器）

-filter:a（同-af，音频过滤器）

-fs 限制输出文件大小，以字节表示，超出限制后不会写入更多字节，输出文件的大小略大于请求的文件大小

-ab 音频比特率（-ab 320k，CBR（恒定比特率编码））

-ar 音频采样率（-ar 44100）

-ac 音频通道数（-ac 1表示单声道，-ac 2立体声）

-vol 音量大小（-vol 256表示原音量，-vol 512表示原音量的两倍）

-d 总共的秒数（-d 2667）

-maxrate 设置最大视频码率容忍度（希望码率波动不要超过一个阈值）

-minrate 设置最小视频码率容忍度

-bufsize 设置码率控制缓冲区大小（让整体的码率更趋近于希望的值，减少波动）

-pass 1（使用“一次编码”，此时可以使用-an，不需对音频操作，-pass 2“二次编码”，范围1~3，注意会生成两个log文件）

-crf（-crf 20，一般选择16~25，数值越小质量越高。固定质量编码（最终比特率未知），范围0~51）

-preset （默认-preset medium，预设）
（从快到慢有 ultrafast，superfast，veryfast，faster，fast，medium，slow，slower，veryslow，placebo）
（一般看情况用faster~slower这些就可以）

-tune（例如-tune film，调整）
（有 film（一般文件），animation（动画），grain（老视频颗粒噪音），still image（图片幻灯片），fast decode（解码快），zeolatency（网络视频、编码快））

-metadata 设置元数据键值，可以通过使用空值来删除元数据
（-metadata title="my title"，设置标题）
（-metadata:s:a:0 language=eng，设置第一个音频流的语言）

-stats 打印编码进度统计（-nostats禁用）

-disposition 设置流的配置，此选项覆盖从输入流复制的配置 （感觉只是一个标记，没啥用）
（-disposition:a:1 default，设置音频轨道的第二个为默认值，字幕类推）
（-disposition:s:0 0，从第一个字幕流删除默认处置）

-max_muxing_queue_size 4096 （增大容器封装队列大小，解决出现"Too many packets buffered for output stream"问题用）

-safe 0（解决出现"Unsafe file name"问题用）

-threads 设置CPU的使用率，实施多线程的运算，充分利用多核cpu（-threads 2，CPU使用率50%）

-accurate_seek（精确剪辑用，放在"-i"前）

-avoid_negative_ts 1（精确剪辑用）

-fix_sub_duration 调整字幕时间

-q:v （-q:v 2，表示存储jpeg的图像质量，一般2是高质量）
]]
f=[==[
【常用滤镜笔记】

-vf为视频滤镜（也可给图像使用），-af为音频滤镜。-filter_complex或-lavfi为复杂滤镜，可用在视频、图像或音频上。
滤镜的简易使用形式例如：-vf 滤镜图=相应设置，-af 滤镜图=相应设置，-filter_complex 滤镜图 "相 应 设 置"
【注意命令里的空格，有空格要加引号】

滤镜图，滤镜链，和滤镜关系：滤镜图能够包括多个滤镜链，而每一个滤镜链又能够包括多个滤镜。
滤镜链使用";"分隔，滤镜链中滤镜使用","分隔。
滤镜链假设没有指定输入或输出，则默认使用前面的滤镜链的输出为输入。并输出给后面的滤镜链做输入。

简单滤镜图只能处理单路输入流和单路输出流，而且要求输入和输出具有相同的流类型（如视频→视频，字幕→字幕）
复杂滤镜图用于简单滤镜图处理不了的场合。比如，多路输入流和(或)多路输出流，或者输出流与输入流类型不同。
有些特殊的滤镜本身就属于复杂滤镜图，用-filter_complex选项或-lavfi选项指定。如overlay滤镜和amix滤镜就是复杂滤镜图。


subtitles （-vf subtitles=input.ass，使用 libass 程序库在输入视频（input video）上绘制文本类型的字幕）

scale（-vf scale=1920:1080，缩放输入视频的尺寸并/或改变图像格式，使用libswscale库）
（-vf scale=iw/2:-1，意为将输入媒体的宽高尺寸缩放为原来的一半且宽高比不变，iw 是指输入媒体的宽度，-1 是通知缩放滤镜在输出时保持原始的宽高比）

amerge（-filter_complex amerge，两个或两个以上的音频流合并到一个多通道流）

overlay（-filter_complex overlay，默认在左上角，把一个视频/图像覆盖到另一个视频/图像上面，需要两个输入和一个输出）

rotate（-vf rotate=1*PI/2，顺时针旋转90度，逆时针则为 -1*PI/2，任意角度旋转媒体，用弧度表示单位）

delogo（-vf delogo=x:y:w:h[:t[:show]]，-vf delogo=0:0:220:90:100:1，对指定区域做模糊处理，比如能移除输入视频中的logo）
（x:y 以左上角为原点的坐标，w:h logo的宽和高，t 矩形边缘的厚度默认值4，show 若设置为1有一个绿色的矩形，默认值0）

volume（-filter:a "volume=0.5"，减小一半音量，volume=10dB，增大10分贝音量，改变输入音频的音量）

steps（-filter:v "steps=0.5*PTS"，二倍速播放视频，设置输出视频帧的显示时间戳(Presentation Time Stamp)，可以用于快放或慢放等）
（注：可能会导致丢帧，要想避免丢帧，可用设置输出的帧率比输入的帧率高的办法，如四倍速播放，输入帧率为4，则设置输出帧率为16）

atempo（-filter:a atempo=2.0，二倍速播放音频，调整音频播放速度, 范围是0.5~2.0）
（-filter:a "atempo=2.0,atempo=2.0"，可用多个atempo滤镜来实现四倍速音频）

（复杂滤镜图如-filter_complex "[0:v]steps=0.5*PTS[v];[0:a]atempo=2.0[a]"，同时二倍速视音频）

crop（-vf crop=w:h:x:y，以给定的视频尺寸剪裁输入视频。w:h 宽和高，x:y 以左上角为原点的坐标）

pad（-vf pad=w:h:x:y:color，给输入视频添加填充新的显示区域。w:h 最后输出带上黑边的宽和高，x:y 以左上角为原点的坐标，color 所填充的颜色）
]==]
c=[==[
【常用命令笔记】

【若无指明，以下命令的媒体格式均可替换】【参数可自由增减搭配】【（括号）里内容皆为备注说明】【注意命令里的空格】
【示例：】
ffmpeg -i 输入文件目录\输入文件名.flv 输出文件目录/输出文件名.mp4
（命令里的汉字为需填写替换掉的内容，输入和输出的文件目录及文件名均可不同）

压制视频（设定比特率分辨率）
ffmpeg -i input.flv -b:v 3000k -c:a copy -s 1920x1080 output.mp4

压制音频
ffmpeg -i input.ape -q:a 0 output.mp3（VBR）
ffmpeg -i test.aac -b:a 320k test1.aac（CBR）

字幕内挂mkv
ffmpeg -i input.mp4 -i input.ass -c copy output.mkv
ffmpeg -i input.mkv -i input.ass -c copy output.mkv
ffmpeg -i in.mp4 -i in1.ass -i in2.ass -map 1:s:0 -map 2:s:0 -map 0 -c copy out.mkv（多轨字幕）

字幕内嵌mp4
ffmpeg -i input.mkv -b:v 2000k -vf subtitles=input.ass output.mp4
ffmpeg -i input.mp4 -crf 20 -vf subtitles=input.ass output.mp4
ffmpeg -i input.mkv -filter_complex "[0:v][0:s:0]overlay[v]" -map "[v]" -map 0:a -c copy output.mp4（各种编码类型的字幕流）

mkv提取无字幕mp4
ffmpeg -i input.mkv -c copy -sn videoNoSubtitle.mp4

提取音频（ac3，aac，m4a）
ffmpeg -i input.mkv -vn -sn -c:a copy audio.ac3
ffmpeg -i input.mp4 -vn -sn -c:a copy output.m4a

提取视频
ffmpeg -i input.mkv -c:v copy –an -sn videoNoAudioSubtitle.mp4

提取字幕（srt或ass）
ffmpeg -i input.mkv -map 0:s:0 sub.srt
（s:0表示输出第1轨字幕，s:1表示第2轨，以此类推）

字幕转换
ffmpeg -i input.srt output.ass（注意srt先以记事本打开，另存为将编码改成UTF-8或unicode）

剪辑媒体
ffmpeg -ss 0:14.000 -i in.mp3 -c copy out.mp3（剪去指定时间之前的部分）
ffmpeg -ss 1:23.456 -i in.flv -t 0:15.000 -c copy out.mp4（保留指定起点与时长描述的部分）
ffmpeg -ss 2 -to 16 -i in.ass  -c copy out.ass（设定剪辑的起点与终点，取中间14秒）

整合纯视频与音频
ffmpeg -i input.mp4 -i input2.mp3 -c copy output.mp4

新音频替换原视频的音频（媒体各种流交换以此类推）
ffmpeg -i input.mp4 -i input2.wav -c:v copy -map 0:v:0 -map 1:a:0 -b:a 320k output.mp4
ffmpeg -i input.mp3 -i input2.mp4 -c:v copy -map 1:v:0 -map 0:a:0 -b:a 320k output.mp4
（-b:a可换-ab或-q:a）

改变音频音量
ffmpeg -i in.mp3 -vol 512 out.mp3（-vol 512表示原音量的两倍）
ffmpeg -i in.mp4 -af volume=1.5 out.mp4

合并音频（双开）
ffmpeg -i input.mp3 -i input2.mp3 -filter_complex amerge -q:a 0 output.mp3

拼接媒体（格式不同未测试，可能不适用）
ffmpeg -f concat -i filelist.txt -c copy output.mp3（需要先cd到待处理文件所在目录）
（待处理文件包括txt都要在同一目录下。先创建一个filelist.txt，里面输入file 'input1.mp3' file 'input2.mp3' file 'input3.mp3'）
ffmpeg -f concat -i filelist.txt -c copy output.mp4
（filelist.txt，里面输入file 'input1.mp4' file 'input2.mp4' file 'input3.mp4'）

拼接视频（有损）
ffmpeg -i 1.mp4 -i 2.mp4 -i 3.mp4 -filter_complex "[0:0] [0:1] [1:0] [1:1] [2:0] [2:1] concat=n=3:v=1:a=1 [v] [a]" -map "[v]" -map "[a]" output.mp4（分辨率不同未测试，可能不适用）

导出视频帧图片
ffmpeg -i in.mp4 -q:v 0 frames_%04d.jpg（表示以4位数字依次命名导出全部的帧图片）
ffmpeg -ss 19 -to 21 -i in.mp4 %03d.png
ffmpeg -i in.mp4 -vframes 666 %04d.png（以开头为第1帧导出到第666帧）
ffmpeg -ss 01:30.000 -i in.mp4 -vframes 1 out.png（以1分30秒为第1帧，导出这帧）

生成纯背景色纯视频
ffmpeg -lavfi color=Cyan:1920x1280:d=10 out.mp4（10秒）
（使用ffmpeg -colors 查询支持的RGB颜色名称）

给视频加黑边
ffmpeg -i in.mp4 -vf pad=1280:800:0:40:black out.mp4
（w:h:x:y:color）（w:h 最后输出带上黑边的宽和高，x:y 以左上角为原点的坐标，color 所填充的颜色）

裁剪视频或图片
ffmpeg -i in.flv -vf crop=400:400:0:420 out.mp4
ffmpeg -i in.png -vf crop=1280:720:360:0 out.jpg
（w:h:x:y）（w:h 宽和高，x:y 以左上角为原点的坐标）

录屏（需要先安装 screen capturer recorder）
ffmpeg -f dshow -i video="screen-capture-recorder":audio="virtual-audio-capturer" -ab 320k -c:v libx264 -c:a aac -s 1920*1080 -r 25 -b:v 2000k -bufsize 3000k out.mp4

纯录屏（无声音）
ffmpeg -f gdigrab -i desktop out.mp4（默认系统分辨率）
ffmpeg -f gdigrab -video_size 600x480 -offset_x 100 -offset_y 60 -t 15 -i desktop -c:v libx264 out.mp4（以点(100,60)开始，大小600*480，录屏15秒，h.264编码）

批量处理媒体
for /r 媒体所在目录\ %i in (*.flv) do ffmpeg -i %i -c copy "%~dpni.mp4"

给视频添加logo（注意视频与logo的分辨率）
ffmpeg -i in.mp4 -i logo.png -filter_complex overlay -b:v 2000k -c:a copy out.mp4（左上角）
ffmpeg -i in.mp4 -i logo.png -filter_complex overlay=W-w -b:v 2000k -c:a copy out.mp4（右上角）
ffmpeg -i in.mp4 -i logo.png -filter_complex overlay=0:H-h -b:v 2000k -c:a copy out.mp4（左下角）
ffmpeg -i in.mp4 -i logo.png -filter_complex overlay=W-w:H-h -b:v 2000k -c:a copy out.mp4（右下角）

给视频消除logo
ffmpeg -i input.mp4 -vf delogo=x:y:w:h:t:show output.mp4
（x:y 以左上角为原点的坐标，w:h logo的宽和高，t 矩形边缘的厚度默认值4，show 若设置为1有一个绿色的矩形，默认值0）

mp4转gif
ffmpeg -i input.mp4 -b 1000k output.gif

gif转视频
ffmpeg -i input.gif output.mp4

查看媒体信息
ffprobe input.mp4

ass转黑场mp4
ffmpeg -f lavfi -i color=c=black:s=640x360:d=2667:r=25 -vf "ass=input.ass" output.mp4

ass转透明mov
ffmpeg -y -f lavfi -i "color=color=black@0.0:size=640x360,format=rgba,subtitles=input.ass:alpha=1" -c:v png -t "00:44:27.080" output.mov -stats
]==]
et.text=p
para. onClick=function()
  et.text=p
end
filter. onClick=function()
  et.text=f
end
cmd. onClick=function()
  et.text=c
end